﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Collections;
using Model;

namespace Controller
{
    public class cntrCliente
    {

        public cntrCliente()
        {  
        }

        Cliente objCliente;

        #region Metodos

        #region Salvar

        public Boolean Save(DS_Lawyer.ClienteRow pCliente)
        {
            Boolean flagReturn = false;
            if (pCliente.idCliente == string.Empty)
            {
                this.objCliente = new Cliente();
                this.objCliente.IdCliente = System.Guid.NewGuid().ToString();
                this.objCliente.Nome = pCliente.nome;
                this.objCliente.Cpf = pCliente.cpf;
                this.objCliente.Rg = pCliente.rg;
                this.objCliente.Email = pCliente.email;
                this.objCliente.Endereco = Endereco.RetriveObject(pCliente.idEndereco);
                this.objCliente.Usuario = Usuario.RetriveObject(pCliente.idUsuario);
                this.objCliente.DataCadastro = pCliente.dataCadastro;

                try
                {
                    flagReturn = this.objCliente.Persist();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            else
            {
                this.objCliente = Cliente.RetriveObject(pCliente.idCliente);
                this.objCliente.Nome = pCliente.nome;
                this.objCliente.Cpf = pCliente.cpf;
                this.objCliente.Rg = pCliente.rg;
                this.objCliente.DataCadastro = System.DateTime.Now;
                this.objCliente.Email = pCliente.email;
                this.objCliente.Endereco = Endereco.RetriveObject(pCliente.idEndereco);
                this.objCliente.Usuario = Usuario.RetriveObject(pCliente.idUsuario);
                try
                {
                    flagReturn = this.objCliente.Update();
                }
                catch (Exception ex)
                {

                    throw ex;
                }
            }
            return flagReturn;
        }
        #endregion

        #region Delete
        public static Boolean Delete(String pID)
        {
            Boolean flagReturn = false;
            try
            {
                flagReturn = Cliente.Delete(pID);
            }
            catch (Exception e)
            {
                throw e;
            }
            return flagReturn;
        }


        #endregion

        #region Select

        #region SelecByID
        public DS_Lawyer.ClienteRow Select(string pID)
        {
            DS_Lawyer.ClienteDataTable dtCliente = new DS_Lawyer.ClienteDataTable();
            DS_Lawyer.ClienteRow rowCliente = dtCliente.NewClienteRow();

            try
            {
                this.objCliente = Cliente.RetriveObject(pID);
                rowCliente.idCliente = pID;
                rowCliente.idEndereco = this.objCliente.Endereco.IdEndereco;
                rowCliente.idUsuario = this.objCliente.Usuario.IdUsuario;
                rowCliente.nome = this.objCliente.Nome;
                rowCliente.rg = this.objCliente.Rg;
                rowCliente.cpf = this.objCliente.Cpf;
                rowCliente.dataCadastro = this.objCliente.DataCadastro;
                rowCliente.email = this.objCliente.Email;
                

            }
            catch (Exception ex)
            {
                
                throw ex;
            }

            return rowCliente;
        }
        #endregion

        public static DS_Lawyer.ClienteDataTable Select()
        {
            DS_Lawyer.ClienteDataTable dtCliente = new DS_Lawyer.ClienteDataTable();
            try
            {
                IList listClientes = Cliente.RetriveObjects();
                for (int i = 0; i < listClientes.Count; i++)
                {
                    Cliente objCliente = (Cliente)listClientes[i];
                    dtCliente.AddClienteRow(objCliente.IdCliente, objCliente.Nome,
                        objCliente.Rg, objCliente.Cpf, objCliente.Usuario.IdUsuario,
                        objCliente.Endereco.IdEndereco, objCliente.Email, objCliente.DataCadastro);
                }
            }
            catch (Exception ex)
            {
                //Tratar mensagem de erro aqui!
                throw ex;

            }
            return dtCliente;
        }


        public static DS_Lawyer.ClienteDataTable SelectByNome(string pNome)
        {
            DS_Lawyer.ClienteDataTable dtCliente = new DS_Lawyer.ClienteDataTable();
            try
            {
                IList listClientes = Cliente.RetriveObjects(pNome);
                for (int i = 0; i < listClientes.Count; i++)
                {
                    Cliente objCliente = (Cliente)listClientes[i];
                    dtCliente.AddClienteRow(objCliente.IdCliente, objCliente.Nome,
                        objCliente.Rg, objCliente.Cpf, objCliente.Usuario.IdUsuario,
                        objCliente.Endereco.IdEndereco, objCliente.Email, objCliente.DataCadastro);
                }
            }
            catch (Exception ex)
            {
                //Tratar mensagem de erro aqui!
                throw ex;

            }
            return dtCliente;
        }

        #endregion


        #endregion


    }
}
